# Create a clipboard button on the rendered HTML page
source(here::here("clipboard.R")); clipboard
# Set seed for reproducibility
set.seed(1982) 
# Set global options for all code chunks
knitr::opts_chunk$set(
  # Disable messages printed by R code chunks
  message = FALSE,    
  # Disable warnings printed by R code chunks
  warning = FALSE,    
  # Show R code within code chunks in output
  echo = TRUE,        
  # Include both R code and its results in output
  include = TRUE,     
  # Evaluate R code chunks
  eval = TRUE,       
  # Enable caching of R code chunks for faster rendering
  cache = FALSE,      
  # Align figures in the center of the output
  fig.align = "center",
  # Enable retina display for high-resolution figures
  retina = 2,
  # Show errors in the output instead of stopping rendering
  error = TRUE,
  # Do not collapse code and output into a single block
  collapse = FALSE
)
# Start the figure counter
fig_count <- 0
# Define the captioner function
captioner <- function(caption) {
  fig_count <<- fig_count + 1
  paste0("Figure ", fig_count, ": ", caption)
}
library(sf)
library(tmap)
library(mapview)
library(dplyr)
library(osmextract)
# set mapview options
mapviewOptions(basemaps = c("CartoDB.Positron",
                            "OpenStreetMap",
                            "Esri.WorldImagery",
                            "OpenTopoMap"))

source("jobbers/custom_bounding_box.R")

1 Introduction

Data was downloaded from geofabrik and contains all OSM data for Ecuador up to date. We extract rivers and roads within the area of interest. Go to this file to see how that is done.

1.1 Area of interest

area_of_interest <- readRDS("clean_data/manabi_area_simple.RDS")
mapview(
  area_of_interest,
  zcol = "geometry",        # attribute used for fill
  alpha.regions = 0,    # fill transparency
  color = "black",        # border color
  alpha = 0.4,            # border transparency
  legend = FALSE           # remove legend
)

2 Rivers

rivers <- readRDS("clean_data/rivers_in_aoi.RDS")
filtered_rivers <- dplyr::filter(rivers, waterway %in% c("river", "stream"))
mapview(
  filtered_rivers,       # attribute used for fill
  zcol = "waterway",
  legend = TRUE           # remove legend
)

These are the categories of waterways available:

table(rivers$waterway)
## 
##  canal    dam  ditch   dock  drain  river stream   weir    yes 
##    262     13    162      1    107    740   1831      4      2

3 Roads

roads <- readRDS("clean_data/roads_in_aoi.RDS")
major_roads <- c(
  "motorway", "motorway_link",
  "trunk", "trunk_link",
  "primary", "primary_link",
  "secondary", "secondary_link",
  "tertiary", "tertiary_link"
)
filtered_roads <- dplyr::filter(roads, highway %in% major_roads)
mapview(
  filtered_roads,       # attribute used for fill
  zcol = "highway",
  legend = TRUE           # remove legend
)

These are the categories of highways available:

table(roads$highway)
## 
##      bridleway         busway   construction       corridor       cycleway 
##            179             13             22              1            121 
##         escape        footway  living_street       motorway  motorway_link 
##              1           2470            212             13             30 
##           path     pedestrian        primary   primary_link        raceway 
##           7162            251            629             71             13 
##    residential      rest_area           road      secondary secondary_link 
##          27804              1              3            915             49 
##        service          steps       tertiary  tertiary_link          track 
##           8660            151           2030             40          17895 
##          trunk     trunk_link   unclassified 
##            741            131          10998

4 References

grateful::cite_packages(output = "paragraph", out.dir = ".")

We used R version 4.5.0 (R Core Team 2025) and the following R packages: here v. 1.0.1 (Müller 2020), htmltools v. 0.5.8.1 (Cheng et al. 2024), knitr v. 1.50 (Xie 2014, 2015, 2025), mapview v. 2.11.2 (Appelhans et al. 2023), osmextract v. 0.5.3 (Gilardi and Lovelace 2025), plotly v. 4.11.0 (Sievert 2020), renv v. 1.1.5 (Ushey and Wickham 2025), rmarkdown v. 2.29 (Xie, Allaire, and Grolemund 2018; Xie, Dervieux, and Riederer 2020; Allaire et al. 2024), sf v. 1.0.21 (Pebesma 2018; Pebesma and Bivand 2023), tidyverse v. 2.0.0 (Wickham et al. 2019), tmap v. 4.1 (Tennekes 2018), xaringanExtra v. 0.8.0 (Aden-Buie and Warkentin 2024).

Aden-Buie, Garrick, and Matthew T. Warkentin. 2024. xaringanExtra: Extras and Extensions for xaringan Slides. https://doi.org/10.32614/CRAN.package.xaringanExtra.
Allaire, JJ, Yihui Xie, Christophe Dervieux, Jonathan McPherson, Javier Luraschi, Kevin Ushey, Aron Atkins, et al. 2024. rmarkdown: Dynamic Documents for r. https://github.com/rstudio/rmarkdown.
Appelhans, Tim, Florian Detsch, Christoph Reudenbach, and Stefan Woellauer. 2023. mapview: Interactive Viewing of Spatial Data in r. https://github.com/r-spatial/mapview.
Cheng, Joe, Carson Sievert, Barret Schloerke, Winston Chang, Yihui Xie, and Jeff Allen. 2024. htmltools: Tools for HTML. https://github.com/rstudio/htmltools.
Gilardi, Andrea, and Robin Lovelace. 2025. osmextract: Download and Import Open Street Map Data Extracts. https://docs.ropensci.org/osmextract/.
Müller, Kirill. 2020. here: A Simpler Way to Find Your Files. https://doi.org/10.32614/CRAN.package.here.
Pebesma, Edzer. 2018. Simple Features for R: Standardized Support for Spatial Vector Data.” The R Journal 10 (1): 439–46. https://doi.org/10.32614/RJ-2018-009.
Pebesma, Edzer, and Roger Bivand. 2023. Spatial Data Science: With applications in R. Chapman and Hall/CRC. https://doi.org/10.1201/9780429459016.
R Core Team. 2025. R: A Language and Environment for Statistical Computing. Vienna, Austria: R Foundation for Statistical Computing. https://www.R-project.org/.
Sievert, Carson. 2020. Interactive Web-Based Data Visualization with r, Plotly, and Shiny. Chapman; Hall/CRC. https://plotly-r.com.
Tennekes, Martijn. 2018. tmap: Thematic Maps in R.” Journal of Statistical Software 84 (6): 1–39. https://doi.org/10.18637/jss.v084.i06.
Ushey, Kevin, and Hadley Wickham. 2025. renv: Project Environments. https://rstudio.github.io/renv/.
Wickham, Hadley, Mara Averick, Jennifer Bryan, Winston Chang, Lucy D’Agostino McGowan, Romain François, Garrett Grolemund, et al. 2019. “Welcome to the tidyverse.” Journal of Open Source Software 4 (43): 1686. https://doi.org/10.21105/joss.01686.
Xie, Yihui. 2014. knitr: A Comprehensive Tool for Reproducible Research in R.” In Implementing Reproducible Computational Research, edited by Victoria Stodden, Friedrich Leisch, and Roger D. Peng. Chapman; Hall/CRC.
———. 2015. Dynamic Documents with R and Knitr. 2nd ed. Boca Raton, Florida: Chapman; Hall/CRC. https://yihui.org/knitr/.
———. 2025. knitr: A General-Purpose Package for Dynamic Report Generation in R. https://yihui.org/knitr/.
Xie, Yihui, J. J. Allaire, and Garrett Grolemund. 2018. R Markdown: The Definitive Guide. Boca Raton, Florida: Chapman; Hall/CRC. https://bookdown.org/yihui/rmarkdown.
Xie, Yihui, Christophe Dervieux, and Emily Riederer. 2020. R Markdown Cookbook. Boca Raton, Florida: Chapman; Hall/CRC. https://bookdown.org/yihui/rmarkdown-cookbook.
LS0tCnRpdGxlOiAiUml2ZXJzIGFuZCBSb2FkcyBmcm9tIE9wZW5TdHJlZXRNYXAiCmRhdGU6ICJMYXN0IG1vZGlmaWVkOiBgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkLSVtLSVZLicpYCIKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6CiAgICBtYXRoamF4OiAiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9tYXRoamF4QDMvZXM1L3RleC1tbWwtY2h0bWwuanMiCiAgICBoaWdobGlnaHQ6IHB5Z21lbnRzCiAgICB0aGVtZTogZmxhdGx5CiAgICBjb2RlX2ZvbGRpbmc6IHNob3cgIyBjbGFzcy5zb3VyY2UgPSAiZm9sZC1oaWRlIiB0byBoaWRlIGNvZGUgYW5kIGFkZCBhIGJ1dHRvbiB0byBzaG93IGl0CiAgICBkZl9wcmludDogcGFnZWQKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OgogICAgICBjb2xsYXBzZWQ6IHRydWUKICAgICAgc21vb3RoX3Njcm9sbDogdHJ1ZQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCiAgICBmaWdfY2FwdGlvbjogdHJ1ZQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgY3NzOiB2aXN1YWwuY3NzCmFsd2F5c19hbGxvd19odG1sOiB0cnVlCmJpYmxpb2dyYXBoeTogCiAgLSByZWZlcmVuY2VzLmJpYgogIC0gZ3JhdGVmdWwtcmVmcy5iaWIKLS0tCgpgYGB7cn0KIyBDcmVhdGUgYSBjbGlwYm9hcmQgYnV0dG9uIG9uIHRoZSByZW5kZXJlZCBIVE1MIHBhZ2UKc291cmNlKGhlcmU6OmhlcmUoImNsaXBib2FyZC5SIikpOyBjbGlwYm9hcmQKIyBTZXQgc2VlZCBmb3IgcmVwcm9kdWNpYmlsaXR5CnNldC5zZWVkKDE5ODIpIAojIFNldCBnbG9iYWwgb3B0aW9ucyBmb3IgYWxsIGNvZGUgY2h1bmtzCmtuaXRyOjpvcHRzX2NodW5rJHNldCgKICAjIERpc2FibGUgbWVzc2FnZXMgcHJpbnRlZCBieSBSIGNvZGUgY2h1bmtzCiAgbWVzc2FnZSA9IEZBTFNFLCAgICAKICAjIERpc2FibGUgd2FybmluZ3MgcHJpbnRlZCBieSBSIGNvZGUgY2h1bmtzCiAgd2FybmluZyA9IEZBTFNFLCAgICAKICAjIFNob3cgUiBjb2RlIHdpdGhpbiBjb2RlIGNodW5rcyBpbiBvdXRwdXQKICBlY2hvID0gVFJVRSwgICAgICAgIAogICMgSW5jbHVkZSBib3RoIFIgY29kZSBhbmQgaXRzIHJlc3VsdHMgaW4gb3V0cHV0CiAgaW5jbHVkZSA9IFRSVUUsICAgICAKICAjIEV2YWx1YXRlIFIgY29kZSBjaHVua3MKICBldmFsID0gVFJVRSwgICAgICAgCiAgIyBFbmFibGUgY2FjaGluZyBvZiBSIGNvZGUgY2h1bmtzIGZvciBmYXN0ZXIgcmVuZGVyaW5nCiAgY2FjaGUgPSBGQUxTRSwgICAgICAKICAjIEFsaWduIGZpZ3VyZXMgaW4gdGhlIGNlbnRlciBvZiB0aGUgb3V0cHV0CiAgZmlnLmFsaWduID0gImNlbnRlciIsCiAgIyBFbmFibGUgcmV0aW5hIGRpc3BsYXkgZm9yIGhpZ2gtcmVzb2x1dGlvbiBmaWd1cmVzCiAgcmV0aW5hID0gMiwKICAjIFNob3cgZXJyb3JzIGluIHRoZSBvdXRwdXQgaW5zdGVhZCBvZiBzdG9wcGluZyByZW5kZXJpbmcKICBlcnJvciA9IFRSVUUsCiAgIyBEbyBub3QgY29sbGFwc2UgY29kZSBhbmQgb3V0cHV0IGludG8gYSBzaW5nbGUgYmxvY2sKICBjb2xsYXBzZSA9IEZBTFNFCikKIyBTdGFydCB0aGUgZmlndXJlIGNvdW50ZXIKZmlnX2NvdW50IDwtIDAKIyBEZWZpbmUgdGhlIGNhcHRpb25lciBmdW5jdGlvbgpjYXB0aW9uZXIgPC0gZnVuY3Rpb24oY2FwdGlvbikgewogIGZpZ19jb3VudCA8PC0gZmlnX2NvdW50ICsgMQogIHBhc3RlMCgiRmlndXJlICIsIGZpZ19jb3VudCwgIjogIiwgY2FwdGlvbikKfQpgYGAKCgpgYGB7cn0KbGlicmFyeShzZikKbGlicmFyeSh0bWFwKQpsaWJyYXJ5KG1hcHZpZXcpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkob3NtZXh0cmFjdCkKIyBzZXQgbWFwdmlldyBvcHRpb25zCm1hcHZpZXdPcHRpb25zKGJhc2VtYXBzID0gYygiQ2FydG9EQi5Qb3NpdHJvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT3BlblN0cmVldE1hcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXNyaS5Xb3JsZEltYWdlcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9wZW5Ub3BvTWFwIikpCgpzb3VyY2UoImpvYmJlcnMvY3VzdG9tX2JvdW5kaW5nX2JveC5SIikKYGBgCgojIEludHJvZHVjdGlvbgoKCkRhdGEgd2FzIGRvd25sb2FkZWQgZnJvbSBbZ2VvZmFicmlrXShodHRwczovL2Rvd25sb2FkLmdlb2ZhYnJpay5kZS9zb3V0aC1hbWVyaWNhL2VjdWFkb3IuaHRtbCkgYW5kIGNvbnRhaW5zIGFsbCBPU00gZGF0YSBmb3IgRWN1YWRvciB1cCB0byBkYXRlLiBXZSBleHRyYWN0IHJpdmVycyBhbmQgcm9hZHMgd2l0aGluIHRoZSBhcmVhIG9mIGludGVyZXN0LiBHbyB0byB0aGlzIFtmaWxlXShodHRwczovL2dpdGh1Yi5jb20vbGVuaW5yYWZhZWxyaWVyYXNlZ3VyYS9tYW5hYmkvYmxvYi9tYWluL2pvYmJlcnMvd2F5cy5SKSAgdG8gc2VlIGhvdyB0aGF0IGlzIGRvbmUuCgojIyBBcmVhICBvZiBpbnRlcmVzdAoKCmBgYHtyfQphcmVhX29mX2ludGVyZXN0IDwtIHJlYWRSRFMoImNsZWFuX2RhdGEvbWFuYWJpX2FyZWFfc2ltcGxlLlJEUyIpCm1hcHZpZXcoCiAgYXJlYV9vZl9pbnRlcmVzdCwKICB6Y29sID0gImdlb21ldHJ5IiwgICAgICAgICMgYXR0cmlidXRlIHVzZWQgZm9yIGZpbGwKICBhbHBoYS5yZWdpb25zID0gMCwgICAgIyBmaWxsIHRyYW5zcGFyZW5jeQogIGNvbG9yID0gImJsYWNrIiwgICAgICAgICMgYm9yZGVyIGNvbG9yCiAgYWxwaGEgPSAwLjQsICAgICAgICAgICAgIyBib3JkZXIgdHJhbnNwYXJlbmN5CiAgbGVnZW5kID0gRkFMU0UgICAgICAgICAgICMgcmVtb3ZlIGxlZ2VuZAopCmBgYAoKCgojIFJpdmVycwoKCmBgYHtyfQpyaXZlcnMgPC0gcmVhZFJEUygiY2xlYW5fZGF0YS9yaXZlcnNfaW5fYW9pLlJEUyIpCmZpbHRlcmVkX3JpdmVycyA8LSBkcGx5cjo6ZmlsdGVyKHJpdmVycywgd2F0ZXJ3YXkgJWluJSBjKCJyaXZlciIsICJzdHJlYW0iKSkKbWFwdmlldygKICBmaWx0ZXJlZF9yaXZlcnMsICAgICAgICMgYXR0cmlidXRlIHVzZWQgZm9yIGZpbGwKICB6Y29sID0gIndhdGVyd2F5IiwKICBsZWdlbmQgPSBUUlVFICAgICAgICAgICAjIHJlbW92ZSBsZWdlbmQKKQpgYGAKClRoZXNlIGFyZSB0aGUgY2F0ZWdvcmllcyBvZiB3YXRlcndheXMgYXZhaWxhYmxlOgoKYGBge3J9CnRhYmxlKHJpdmVycyR3YXRlcndheSkKYGBgCgoKIyBSb2FkcwoKYGBge3J9CnJvYWRzIDwtIHJlYWRSRFMoImNsZWFuX2RhdGEvcm9hZHNfaW5fYW9pLlJEUyIpCm1ham9yX3JvYWRzIDwtIGMoCiAgIm1vdG9yd2F5IiwgIm1vdG9yd2F5X2xpbmsiLAogICJ0cnVuayIsICJ0cnVua19saW5rIiwKICAicHJpbWFyeSIsICJwcmltYXJ5X2xpbmsiLAogICJzZWNvbmRhcnkiLCAic2Vjb25kYXJ5X2xpbmsiLAogICJ0ZXJ0aWFyeSIsICJ0ZXJ0aWFyeV9saW5rIgopCmZpbHRlcmVkX3JvYWRzIDwtIGRwbHlyOjpmaWx0ZXIocm9hZHMsIGhpZ2h3YXkgJWluJSBtYWpvcl9yb2FkcykKbWFwdmlldygKICBmaWx0ZXJlZF9yb2FkcywgICAgICAgIyBhdHRyaWJ1dGUgdXNlZCBmb3IgZmlsbAogIHpjb2wgPSAiaGlnaHdheSIsCiAgbGVnZW5kID0gVFJVRSAgICAgICAgICAgIyByZW1vdmUgbGVnZW5kCikKYGBgCgoKVGhlc2UgYXJlIHRoZSBjYXRlZ29yaWVzIG9mIGhpZ2h3YXlzIGF2YWlsYWJsZToKCmBgYHtyfQp0YWJsZShyb2FkcyRoaWdod2F5KQpgYGAKCiMgUmVmZXJlbmNlcyAKCmBgYHtyfQpncmF0ZWZ1bDo6Y2l0ZV9wYWNrYWdlcyhvdXRwdXQgPSAicGFyYWdyYXBoIiwgb3V0LmRpciA9ICIuIikKYGBgCgoKCg==